package com.lanou3g.code0522;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;
import java.util.Map;

/**
 * If there are no bugs, it was created by Chen FengYao on 2018/5/22;
 * Otherwise, I don't know who created it either
 */

/*
JavaBean
规定:
1. 必须是一个public类(公有类)
2. 必须有无参构造方法
3. 所有属性必须私有
4. 所有属性必须提供setter/getter方法来访问
    (如果 不希望这个属性 可读/可写,也可以根据情况
    不提供 对应的 setter/getter方法)
    如果是boolean类型的属性,那么它的get方法
    需要写成isXXX
当一个类 满足了这些要求 我们就叫它JavaBean
在日常开发中,当我们说JavaBean的时候,除了要满足上述
4个要求,还有隐藏含义,就是这个类 没有什么实际复杂的逻辑
就是和 数据库/页面 对应的,用来存数据的

 */

/*
HttpSessionBindingListener 这个接口 给对象一个能力
可以知道自己何时被放入到session对象中
何时从session对象中被销毁
 */

/*
要放到session中的JavaBean 必须实现Serializable接口
否则 当session钝化的时候, session域对象中的JavaBean 就丢失了
 */
public class Person implements HttpSessionBindingListener
        ,Serializable{
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;
    private boolean marry;
    private Map<String,String> jobs;
    private String[] titles;

    public String[] getTitles() {
        return titles;
    }

    public Person setTitles(String[] titles) {
        this.titles = titles;
        return this;
    }

    public Map<String, String> getJobs() {
        return jobs;
    }
    public Person setJobs(Map<String, String> jobs) {
        this.jobs = jobs;
        return this;
    }

    public boolean isMarry() {
        return true;
    }


    public Person setMarry(boolean marry) {
        this.marry = marry;
        return this;
    }

    public String getName() {
        return name;
    }

    public Person setName(String name) {
        this.name = name;
        return this;
    }

    public int getAge() {
        return age - 8;
    }

    public Person setAge(int age) {
        this.age = age;
        return this;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("我" + name + "被放入session中");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("我" + name + "从session中被销毁了");
    }


//    @Override
//    public void sessionWillPassivate(HttpSessionEvent se) {
//        System.out.println("我跟session一起去硬盘了");
//    }
//
//    @Override
//    public void sessionDidActivate(HttpSessionEvent se) {
//        System.out.println("我跟session一起回内存了");
//    }
}
